package com.biz.primus.base.vo.commodity;

import com.biz.primus.base.constant.Constant;
import com.biz.primus.base.vo.ProductPromotionTagRespVo;
import com.biz.primus.common.utils.ValueUtils;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Optional;

/**
 * BBC 商品列表项 Vo
 *
 * @author david-liu
 * @date 2017年01月04日
 * @reviewer
 */
@Data
@ApiModel("商品列表项,任何属性都可能为null")
public class ProductListItemVo implements Serializable {

    private static final long serialVersionUID = 2182996746973540544L;

    @ApiModelProperty("阿里云推荐记录足迹Id 推荐场景使用")
    private String traceId;

    @ApiModelProperty("商品基本信息")
    private ProductBaseVo base;

    @ApiModelProperty("商品库存信息")
    private ProductStockVo productStockVo;

    @ApiModelProperty("商品价格信息")
    private ProductPriceVo productPriceVo;

    @ApiModelProperty("商品促销")
    private ProductPromotionVo productPromotionVo;

    @ApiModelProperty("预计配送时间  单位分钟")
    private Integer predictTime;

    @ApiModelProperty("商品最终价格 考虑了库存和简单特价(适用于前端列表页或详情页展示价格的地方)")
    private ProductFinalPriceVo productFinalPriceVo;

    public ProductPromotionTagRespVo getProductPromotionTagRespVo(){
        return Optional.ofNullable(this.getProductPromotionVo())
                .orElse(new ProductPromotionVo()).getProductPromotionTag();
    }

    /**
     * 门店价格不合法 在相应场景 需要过滤掉
     * 在需要门店会员价格一定合法的情况下 需要进行此过滤
     * @return
     */
    @JsonIgnore
    public Boolean depotPriceFilter(){
        if (this.productPriceVo!=null&&this.productPriceVo.getDepotPrice()!=null
                && ValueUtils.getValue(this.productPriceVo.getDepotPrice().getFinalPrice())> Constant.MIN_SALE_PRICE){
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

    /**
     * 全国价格不合法 在相应场景 需要过滤掉
     * @return
     */
    @JsonIgnore
    public Boolean globalPriceFilter(){
        if (this.productPriceVo!=null&&this.productPriceVo.getVirtualPrice()!=null
                && ValueUtils.getValue(this.productPriceVo.getVirtualPrice().getFinalPrice())> Constant.MIN_SALE_PRICE){
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

    /**
     * 门店库存filter
     * 立即送模式需要门店库存一定合法,那么不合法的将被过滤
     * @return
     */
    @JsonIgnore
    public Boolean depotStockFilter(){
        if (this.productStockVo!=null&&this.productStockVo.getStockRespVo()!=null
                &&ValueUtils.getValue(this.productStockVo.getStockRespVo().getQuantity())>0){
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }

    /**
     * 区域库存
     * @return
     */
    @JsonIgnore
    public Boolean globalStockFilter(){
        if (this.productStockVo!=null&&this.productStockVo.getStockRespVo()!=null
                &&ValueUtils.getValue(this.productStockVo.getStockRespVo().getWarehouseQuantity())>0){
            return Boolean.FALSE;
        }
        return Boolean.TRUE;
    }



    /**
     * 获取门店简单特价,不存在时会返回null
     * @return
     */
    @JsonIgnore
    public Integer getDepotSpecialOfferPromotion(){
        if (this.productPromotionVo==null){
            return null;
        }
        if (this.productPromotionVo.getSpecialOfferPromotion() == null){
            return null;
        }
        return this.productPromotionVo.getSpecialOfferPromotion().getSpecialOfferPrice();
    }

    /**
     * 获取门店最终价格  min(depotPrice,简单特价),调用前需要调用下方判断
     * @see com.biz.primus.base.vo.commodity.ProductListItemVo#depotPriceFilter()
     * @return
     */
    @JsonIgnore
    public Integer getDepotFinalPrice(){
        Integer depotPrice = this.productPriceVo.getDepotPrice().getFinalPrice();
        if (ValueUtils.getValue(this.getDepotSpecialOfferPromotion())>Constant.MIN_SALE_PRICE) {
            return Math.min(depotPrice, this.getDepotSpecialOfferPromotion());
        }else {
            return depotPrice;
        }
    }

    /**
     * 获取全国价格,全国价格没有门店特价,调用前需调用下方判断
     * @see ProductListItemVo#globalPriceFilter()
     * @return
     */
    public Integer getGlobalFinalPrice(){
        return this.productPriceVo.getVirtualPrice().getFinalPrice();
    }

    /**
     * 获得门店整箱单瓶价,不存在或不合法时为空
     * @return
     */
    @JsonIgnore
    public Integer getDepotFclSinglePrice(){
        if (ValueUtils.getValue(this.productPriceVo.getDepotPrice().getFclSinglePrice())>Constant.MIN_SALE_PRICE){
            return this.productPriceVo.getDepotPrice().getFclSinglePrice();
        }else {
            return null;
        }
    }

    /**
     * 获得全国整箱单瓶价,不存在或不合法时为空
     * @return
     */
    @JsonIgnore
    public Integer getGlobalFclSinglePrice(){
        if (ValueUtils.getValue(this.productPriceVo.getVirtualPrice().getFclSinglePrice())>Constant.MIN_SALE_PRICE){
            return this.productPriceVo.getVirtualPrice().getFclSinglePrice();
        }else {
            return null;
        }
    }

}
